#include "FloatTextEdit.h"  // 包含 FloatTextEdit 类的声明
#include <QVBoxLayout>      // 包含 QVBoxLayout 类，用于纵向布局

// 构造函数
// parent：父控件指针，默认 nullptr 表示无父控件
FloatTextEdit::FloatTextEdit(QWidget *parent)
        : QWidget(parent), floating(false), floatingWindow(nullptr) // 初始化基类和成员变量
{
    // 创建 QLabel 显示说明文本
    label = new QLabel("文本设置-结果展示：", this);

    // 创建 QTextEdit 用于多行文本编辑
    textEditor = new QTextEdit(this);
    textEditor->setPlaceholderText("文本设置-结果展示：......"); // 设置占位符
    textEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // 自适应布局

    // 创建 QPushButton，用于触发浮动/回位
    btnToggle = new QPushButton("浮动/回位", this);

    // 保存原布局，用于回位时恢复控件位置
    mainLayout = new QVBoxLayout(this);
    mainLayout->addWidget(label);       // 添加 QLabel 到布局
    mainLayout->addWidget(textEditor);  // 添加 QTextEdit 到布局
    mainLayout->addWidget(btnToggle);   // 添加 QPushButton 到布局
    setLayout(mainLayout);              // 设置布局到当前 QWidget

    // 连接信号与槽
    // 当按钮被点击时，调用 toggleFloating() 槽函数
    connect(btnToggle, &QPushButton::clicked, this, &FloatTextEdit::toggleFloating);
}

// 槽函数：浮动/回位逻辑
void FloatTextEdit::toggleFloating()
{
    if (!floating) // 当前不浮动，执行浮动操作
    {
        // 创建新的浮动窗口
        floatingWindow = new QWidget;
        floatingWindow->setWindowTitle("浮动窗口"); // 设置窗口标题

        // 从原布局中移除 QTextEdit
        mainLayout->removeWidget(textEditor);

        // 将 QTextEdit 添加到浮动窗口的布局中
        QVBoxLayout *layout = new QVBoxLayout(floatingWindow);
        layout->addWidget(textEditor);
        floatingWindow->setLayout(layout);

        // 设置浮动窗口初始大小
        floatingWindow->resize(400, 300);

        // 显示浮动窗口
        floatingWindow->show();
    }
    else // 当前是浮动状态，执行回位操作
    {
        // 从浮动窗口移回原布局
        if (floatingWindow)
        {
            // 获取浮动窗口的布局，并移除 QTextEdit
            QVBoxLayout *floatLayout = qobject_cast<QVBoxLayout*>(floatingWindow->layout());
            if (floatLayout)
                floatLayout->removeWidget(textEditor);

            // 关闭浮动窗口并释放指针
            floatingWindow->close();
            floatingWindow = nullptr;
        }

        // 添加 QTextEdit 回原布局，保持在 QLabel 和按钮之间
        mainLayout->insertWidget(1, textEditor);
    }

    // 切换浮动状态标记
    floating = !floating;
}
